package com.share.common.rabbit.MqConfig;

import com.share.common.rabbit.MqConstant.MqConst;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ExchangeConfig {

    /**
     * 1.定义direct exchange，绑定 queueTest
     * 2.durable="true" rabbitmq重启的时候不需要创建新的交换机
     * 3.direct交换器相对来说比较简单，匹配规则为：如果路由键匹配，消息就被投送到相关的队列
     * 4.fanout交换器中没有路由键的概念，他会把消息发送到所有绑定在此交换器上面的队列中。
     * 5.topic交换器你采用模糊匹配路由键的原则进行转发消息到队列中
     */

    /**
     * mysql 同步消息 redis
     * @return
     */
    @Bean
    public TopicExchange defaultRedisExchange() {
        //durable="true" 持久化,mq重启之后交换机还在
        return new TopicExchange(MqConst.EXCHANGE_REDIS_SYNC, true, false);
    }

    /**
     * 创建订单交换机
     * @return
     */
    @Bean
    public TopicExchange createOrderExchange() {
        //durable="true" 持久化,mq重启之后交换机还在
        return new TopicExchange(MqConst.EXCHANGE_ORDER, true, false);
    }


    /**
     * 死信交换机
     * @return
     */
    @Bean
    public DirectExchange deadLetterExchange() {
        //durable="true" 持久化,mq重启之后交换机还在
        return new DirectExchange(MqConst.DEAD_LETTER_EXCHANGE, true, false);
    }

}
